#!/usr/bin/env python

from __future__ import print_function

import getopt
import sys
import os
import base64

# Perform the GTK UI dependency check, this will verify that the current system
# has all the modules required to run w3af (including the core dependencies)
from w3af.core.ui.gui.dependency_check.dependency_check import dependency_check
dependency_check()

import w3af.core.controllers.output_manager as om

      
USAGE_DOC = '''
w3af - Web Application Attack and Audit Framework

Usage:

    ./w3af_gui [OPTIONS]

Options:

    -h or --help
        Display this help message.

    -n or --no-update
        No update check will be made when starting. This option takes 
        precedence over the 'auto-update' setting in 'startup.conf' file.
     
    -f or --force-update
        An update check will be made when starting. This option takes 
        precedence over the 'auto-update' setting in 'startup.conf' file.
    
    -p <profile> or --profile=<profile>
        Run with the selected <profile>

For more info visit http://w3af.org/
'''    


def _configure_output_manager():
    """
    Make sure that the output manager is started before doing anything else,
    since it is used by most w3af modules
    """
    try:
        om.manager.set_output_plugins(['console'])
    except Exception as e:
        print('Something went wrong, w3af failed to start the output manager.')
        print('Exception: "%s"' % e)
        sys.exit(-9)


def usage():
    print(USAGE_DOC)


def main():
    try:
        long_options = ['help', 'no-update', 'force-update', 'profile=']
        opts, _ = getopt.getopt(sys.argv[1:], "ehnfp:", long_options)
    except getopt.GetoptError:
        # print help information and exit:
        usage()
        return -3
    
    profile = None
    doupdate = None
    
    for o, a in opts:
        if o in ("-e"):
            # easter egg
            msg = 'R3JhY2lhcyBFdWdlIHBvciBiYW5jYXJtZSB0YW50YXMgaG9yYXMgZGUgZGV'\
                  'zYXJyb2xsbywgdGUgYW1vIGdvcmRhIQ=='
            print(base64.b64decode(msg))
        if o in ('-p', '--profile'):
            # selected profile
            profile = a
        if o in ('-h', '--help'):
            usage()
            return 0
        if o in ('-f', '--force-update'):
            doupdate = True
        elif o in ('-n', '--no-update'):
            doupdate = False
    

    # go with GTK, but first check about DISPLAY environment variable
    if sys.platform != "win32":
        display = os.getenv("DISPLAY")
        if not display:
            om.out.error("The DISPLAY environment variable is not set! You can"
                         " not use any graphical program without it...")
            return -1

    from w3af.core.ui.gui.main import main as gui_main
    gui_main(profile, doupdate)


def _main():
    _configure_output_manager()
    sys.exit(main())


if __name__ == "__main__":
    _main()
